package com.ylbh.modules.goods.mapper;

import com.ylbh.common.pojo.goods.dto.SpecIficationDTO;
import com.ylbh.common.pojo.goods.dto.SpecPropertyDTO;
import com.ylbh.common.pojo.goods.dto.SpecsDTO;
import com.ylbh.common.pojo.goods.vo.SpecIficationVO;
import com.ylbh.common.pojo.goods.vo.SpecPropertyVO;
import com.ylbh.common.utils.PageDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author mgh
 */
@Mapper
@Repository
public interface GoodsSpecMapper{

    /**
     * 查询规格
     * @param idArray
     * @return
     */
    List<SpecsDTO> selectSpecsById(@Param("idArray") String[] idArray);


    /**
     * 通过分类id获取分类对应的规格数据
     * @param gcId
     * @return
     */
    List<SpecIficationVO> selectSpecsList(@Param("gcId") Integer gcId);

    /**
     * 添加或更新规格
     * @param specIficationDTO
     */
    void insertOrUpdateIfication(SpecIficationDTO specIficationDTO);

    /**
     * 添加规格属性
     * @param specPropertyDTO
     */
    void insertProperty(SpecPropertyDTO specPropertyDTO);

    /**
     * 通过属性查询自定义规格
     * @param id
     * @return
     */
    SpecIficationVO getCustomSpecs(Long id);

    /**
     * 商品规格信息列表
     * @param pageDTO
     * @return
     */
    List<SpecIficationVO> queryGoodsIficationList(PageDTO pageDTO);

    /**
     * 商品规格信息列表总数
     * @param pageDTO
     * @return
     */
    Integer getGoodsIficationCount(PageDTO pageDTO);

    /**
     * 修改商品规格
     * @param specIficationDTO
     */
    void modifyById(SpecIficationDTO specIficationDTO);

    /**
     * 新增商品规格
     * @param specIficationDTO
     */
    void insertIfication(SpecIficationDTO specIficationDTO);

    /**
     * 查询规格属性
     * @param ificationId
     * @return
     */
    List<SpecPropertyVO> queryPropertyByIficationIdList(Integer ificationId);

    void updatePropertyById(SpecPropertyDTO specPropertyDTO);

    /**
     * 根据候鸟的规格名去查询数据库中是否存在该规格
     * @param specDesc
     * @return
     */
    List<Integer> selectExistenceByName(String specDesc);

    /**
     * 根据规格名新增规格
     * @param date
     * @return
     */
    int insertSpec(@Param(value = "dto") SpecPropertyDTO dto, @Param(value = "date") Date date);

    /**
     * 插入商品id与规格和的中间表信息
     * @param specId
     * @param id
     */
    void insertGoodsIdOrSpecId(Integer specId, Long id);

    /**
     * 如果插入都没有返回id就去查(候鸟)
     * @param spdto
     * @return
     */
    SpecPropertyDTO selectSpecIdByName(SpecPropertyDTO spdto);

    /**
     * 根据商品id查询轮播图id
     * @param id
     * @return
     */
    List<Long> selectPhotoIdByGoodsId(Long id);

    /**
     * 根据规格的属性和值查询值id
     * @param name
     * @param val
     * @return
     */
    List<Integer> selectIsExistenceByNameAndVal(String name, String val);

    /**
     * shopping_goodsspecification表中查询是否有这个值
     * @param name
     * @return
     */
    List<Integer> selectGoodsSpecificationByName(String name);

    /**
     * 新增规格属性
     * @param spdto
     * @return
     */
    int insertGoodsSpecification(@Param(value = "spdto") SpecPropertyDTO spdto);
}
